﻿/*
 * Created by SharpDevelop.
 * User: Administrator
 * Date: 2019-09-07
 * Time: 23:28
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Drawing;
using System.Windows.Forms;

namespace QStarter
{
	/// <summary>
	/// Description of ResizeForm.
	/// </summary>
	public class BaseForm : Form
	{
		public int isResize = 1;
		public int isLocation = 1;
		
		#region 无边框窗体拖动及改变大小
		
		const int HTLEFT = 10;
		const int HTRIGHT = 11;
		const int HTTOP = 12;
		const int HTTOPLEFT = 13;
		const int HTTOPRIGHT = 14;  
		const int HTBOTTOM = 15;  
		const int HTBOTTOMLEFT = 0x10;  
		const int HTBOTTOMRIGHT = 17;
		
		protected override void WndProc(ref Message m)  
		{  
		    switch (m.Msg)  
		    {  
		        case 0x0084:
		    		base.WndProc(ref m);
		    		if (this.isResize > 0)
		            {
			            Point vPoint = new Point((int)m.LParam & 0xFFFF, (int)m.LParam >> 16 & 0xFFFF);  
			            vPoint = PointToClient(vPoint);  
			            if (vPoint.X <= 5)
			                if (vPoint.Y <= 5)  
			                    m.Result = (IntPtr)HTTOPLEFT;  
			                else if (vPoint.Y >= ClientSize.Height - 5)  
			                    m.Result = (IntPtr)HTBOTTOMLEFT;  
			                else m.Result = (IntPtr)HTLEFT;  
			            else if (vPoint.X >= ClientSize.Width - 5)  
			                if (vPoint.Y <= 5)  
			                    m.Result = (IntPtr)HTTOPRIGHT;  
			                else if (vPoint.Y >= ClientSize.Height - 5)  
			                    m.Result = (IntPtr)HTBOTTOMRIGHT;  
			                else m.Result = (IntPtr)HTRIGHT;  
			            else if (vPoint.Y <= 5)  
			                m.Result = (IntPtr)HTTOP;  
			            else if (vPoint.Y >= ClientSize.Height - 5)  
			                m.Result = (IntPtr)HTBOTTOM;
		    		}
		            break;
		        case 0x0201: //鼠标左键按下的消息
		            if (this.isLocation > 0)
		            {
			            m.Msg = 0x00A1; //更改消息为非客户区按下鼠标   
			            m.LParam = IntPtr.Zero; //默认值   
			            m.WParam = new IntPtr(2); //鼠标放在标题栏内   
		            }
		            base.WndProc(ref m);
		            break;
		        case 0x312: //热键消息
		            if (m.WParam.ToInt32() == 0)
		            {
		            	if (this.Visible) 
		            	{
		            		this.Hide();
		            	}
		            	else
		            	{ 
		            		this.Show();
		            		NativeMethods.SetForegroundWindow(this.Handle);
		            	}
		            }
		            base.WndProc(ref m);
		            break;
		        default:
		            base.WndProc(ref m);
		            break;  
		    }  
		}
		
		#endregion
	}
}
